package com.kexio.common.enums;

/**
 * 通用状态枚举
 * 
 * 用于表示数据的状态（启用、禁用、删除等）
 * 
 * @author Kexio Team
 * @since 1.0.0
 */
public enum StatusEnum {
    
    /** 启用 */
    ENABLED(1, "启用"),
    
    /** 禁用 */
    DISABLED(0, "禁用"),
    
    /** 删除 */
    DELETED(-1, "删除");
    
    // ==================== 字段定义 ====================
    
    /** 状态值 */
    private final Integer value;
    
    /** 状态描述 */
    private final String description;
    
    // ==================== 构造函数 ====================
    
    StatusEnum(Integer value, String description) {
        this.value = value;
        this.description = description;
    }
    
    // ==================== 静态方法 ====================
    
    /**
     * 根据值获取枚举
     * 
     * @param value 状态值
     * @return 对应的枚举，如果不存在则返回null
     */
    public static StatusEnum valueOf(Integer value) {
        if (value == null) {
            return null;
        }
        
        for (StatusEnum status : values()) {
            if (status.getValue().equals(value)) {
                return status;
            }
        }
        return null;
    }
    
    /**
     * 判断值是否有效
     * 
     * @param value 状态值
     * @return 是否为有效的状态值
     */
    public static boolean isValid(Integer value) {
        return valueOf(value) != null;
    }
    
    /**
     * 判断是否为启用状态
     * 
     * @param value 状态值
     * @return 是否为启用状态
     */
    public static boolean isEnabled(Integer value) {
        return ENABLED.getValue().equals(value);
    }
    
    /**
     * 判断是否为禁用状态
     * 
     * @param value 状态值
     * @return 是否为禁用状态
     */
    public static boolean isDisabled(Integer value) {
        return DISABLED.getValue().equals(value);
    }
    
    /**
     * 判断是否为删除状态
     * 
     * @param value 状态值
     * @return 是否为删除状态
     */
    public static boolean isDeleted(Integer value) {
        return DELETED.getValue().equals(value);
    }
    
    // ==================== 实例方法 ====================
    
    /**
     * 判断是否为启用状态
     * 
     * @return 是否为启用状态
     */
    public boolean isEnabled() {
        return this == ENABLED;
    }
    
    /**
     * 判断是否为禁用状态
     * 
     * @return 是否为禁用状态
     */
    public boolean isDisabled() {
        return this == DISABLED;
    }
    
    /**
     * 判断是否为删除状态
     * 
     * @return 是否为删除状态
     */
    public boolean isDeleted() {
        return this == DELETED;
    }
    
    // ==================== Getter ====================
    
    public Integer getValue() {
        return value;
    }
    
    public String getDescription() {
        return description;
    }
    
    // ==================== toString ====================
    
    @Override
    public String toString() {
        return "StatusEnum{" +
               "value=" + value +
               ", description='" + description + '\'' +
               '}';
    }
}
